﻿using System;
using System.Data;
using System.Collections.Generic;
using eTMS.Controllers.PhongHocNgayNghiService;
namespace eTMS.Controllers
{
    public class PhongHocNgayNghiController : PhongHocNgayNghiControllerBase
    {
        public PhongHocNgayNghiController()
            : base()
        {
            if (AllowCaching && Cache == null)
            {
                InitCache();
            }
        }
        public List<PhongHocNgayNghiEntity> FindAllByPhongHoc(int PhongHoc_ID)
        {
            return ListPhongHocNgayNghiStatic.FindAll(delegate(PhongHocNgayNghiEntity oFind) { return oFind.PhongHoc_ID == PhongHoc_ID; });
        }
        public PhongHocNgayNghiEntity FindByThuTiet(int Thu_ID, int TietHoc_ID, List<PhongHocNgayNghiEntity> ls)
        {
            return ls.Find(delegate(PhongHocNgayNghiEntity oFind) { return oFind.Thu_ID == Thu_ID && oFind.TietHoc_ID == TietHoc_ID; });
        }
        private PhongHocNgayNghiEntity oPhongHocNgayNghi;
        public PhongHocNgayNghiEntity PhongHocNgayNghiObject
        {
            get
            {
                return oPhongHocNgayNghi;
            }
            set
            {
                oPhongHocNgayNghi = value;
            }
        }


        public void LoadObject(Int32 PhongHocNgayNghi_ID)
        {
            PhongHocNgayNghiEntity oLoad = FindPhongHocNgayNghi(PhongHocNgayNghi_ID);
            if (oLoad == null)
            {
                LoadAllPhongHocNgayNghi(true);
                oPhongHocNgayNghi = FindPhongHocNgayNghi(PhongHocNgayNghi_ID);
            }
            else
            {
                oPhongHocNgayNghi = oLoad;
            }
        }
        public bool AddNew()
        {
            if (oPhongHocNgayNghi == null) return false;
            bool result = true;
            try
            {
                oPhongHocNgayNghi = dao.SaveRet(oPhongHocNgayNghi);
                result &= !oPhongHocNgayNghi.IsNullPhongHocNgayNghi_ID;
            }
            catch
            {
                result = false;
            }
            if (result)
            {
                AddObjectToCache(oPhongHocNgayNghi);
            }
            return result;
        }
        public bool Update()
        {
            if (oPhongHocNgayNghi == null) return false;
            return dao.Update(oPhongHocNgayNghi);
        }
        public bool Delete()
        {
            if (oPhongHocNgayNghi == null) return false;
            bool retvalue = dao.Delete(oPhongHocNgayNghi);
            if (retvalue)
            {
                RemoveObjectFromCache(oPhongHocNgayNghi);
            }
            return retvalue;
        }
        public bool DeleteByID(Int32 PhongHocNgayNghi_ID)
        {
            bool retvalue = dao.DeleteByID(PhongHocNgayNghi_ID);
            if (retvalue)
            {
                PhongHocNgayNghiEntity oDeleted = FindPhongHocNgayNghi(PhongHocNgayNghi_ID);
                RemoveObjectFromCache(oDeleted);
            }
            return retvalue;
        }
        public void ResetObject()
        {
            this.oPhongHocNgayNghi = new PhongHocNgayNghiEntity();
        }
        public void MapObjectToDataRow(DataRow row)
        {
            this.MapObjectToDataRow(this.PhongHocNgayNghiObject, row);
        }
        public PhongHocNgayNghiEntity LoadPhongHocNgayNghi(Int32 PhongHocNgayNghi_ID)
        {
            PhongHocNgayNghiEntity o = dao.SelectOne(PhongHocNgayNghi_ID);
            return o;
        }
        #region Cached
        private static List<PhongHocNgayNghiEntity> _ListPhongHocNgayNghi;
        private static bool _AllowCaching = true;
        public static bool AllowCaching
        {
            get { return _AllowCaching; }
            set { AllowCaching = value; }
        }
        public static void ClearCache()
        {
            if (!_AllowCaching) return;
            Cache.Remove(CACHE_KEY_DS);
            Cache.Remove(CACHE_KEY_LS);
        }
        private const string CACHE_KEY_DS = "PhongHocNgayNghiDS";
        private const string CACHE_KEY_LS = "PhongHocNgayNghiLS";
        private void AddObjectToCache(PhongHocNgayNghiEntity newObject)
        {
            if (!AllowCaching) return;
            GetCacheList().Add(newObject);
        }
        private void RemoveObjectFromCache(PhongHocNgayNghiEntity oRemove)
        {
            if (!AllowCaching) return;
            if (oRemove != null)
                GetCacheList().Remove(oRemove);
        }
        private static List<PhongHocNgayNghiEntity> GetCacheList()
        {
            if (Cache == null) return default(List<PhongHocNgayNghiEntity>);
            List<PhongHocNgayNghiEntity> ls = Cache.Get<List<PhongHocNgayNghiEntity>>(CACHE_KEY_LS);
            if (ls == null)
            {
                ls = new List<PhongHocNgayNghiEntity>();
                AddCache(CACHE_KEY_LS, ls);
            }
            return ls;
        }
        public List<PhongHocNgayNghiEntity> ListPhongHocNgayNghi
        {
            get
            {
                return LoadAllPhongHocNgayNghi(false);
            }
        }
        public static List<PhongHocNgayNghiEntity> ListPhongHocNgayNghiStatic
        {
            get
            {
                LoadAllPhongHocNgayNghi(false);
                return _ListPhongHocNgayNghi;
            }
        }
        public PhongHocNgayNghiEntity FindPhongHocNgayNghi(Int32 PhongHocNgayNghi_ID)
        {
            if (AllowCaching)
            {
                _ListPhongHocNgayNghi = GetCacheList();
            }
            PhongHocNgayNghiEntity oResult = _ListPhongHocNgayNghi.Find(delegate(PhongHocNgayNghiEntity oFind)
            {
                bool result = true;
                result &= oFind.PhongHocNgayNghi_ID.Equals(PhongHocNgayNghi_ID);
                return result;
            });
            return oResult;
        }
        public static List<PhongHocNgayNghiEntity> LoadAllPhongHocNgayNghi(bool clearCache)
        {
            _ListPhongHocNgayNghi = new List<PhongHocNgayNghiEntity>();
            if (AllowCaching)
            {
                _ListPhongHocNgayNghi = GetCacheList();
            }
            if (_ListPhongHocNgayNghi == null || _ListPhongHocNgayNghi.Count == 0)
                clearCache = true;
            if (!clearCache) return _ListPhongHocNgayNghi;
            PhongHocNgayNghiServiceClient dao = new PhongHocNgayNghiServiceClient();
            _ListPhongHocNgayNghi = new List<PhongHocNgayNghiEntity>(dao.SelectAll());
            dao.Close();
            if (AllowCaching)
                AddCache(CACHE_KEY_LS, _ListPhongHocNgayNghi);
            return _ListPhongHocNgayNghi;
        }
        #endregion
    }
}
